package com.pengcheng.taskapplication.net;

import android.content.Context;

import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.pengcheng.taskapplication.TaskApplication;
import com.pengcheng.taskapplication.contants.ConstantValue;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import retrofit2.Retrofit;

/**
 * Created by ZFT on 2020/11/6.
 */

public class ConvertUtil {

    /**
     * 日期格式，年月日，例如：20050630，20080808
     */
    public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd";

    public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd";

    public static final String DATE_FORMAT_POINTYYYYMMDD = "yyyy.MM.dd";

    /**
     * 日期格式，年月日，例如：2016年10月05日
     */
    public static final String DATE_TIME_FORMAT_YYYY年MM月DD日 = "yyyy年MM月dd日";

    public static Date convertValidityStart(String validityStart){
        return strToDateLong(dateToStrLong(parseStrToDate(validityStart,DATE_FORMAT_YYYYMMDD)));
    }

    public static Date convertValidityEnd(String validityEnd){
        return strToDateLong(dateToStrLong(parseStrToDate(validityEnd,DATE_FORMAT_YYYYMMDD)));
    }

    public static Date convertBirthDay(String birthday){
        if(birthday.length()==8&isValidDate(birthday,DATE_FORMAT_YYYYMMDD)){
            return  strToDateLong(dateToStrLong(parseStrToDate(birthday,DATE_FORMAT_YYYYMMDD)));
        }else if(birthday.length()==10&isValidDate(birthday,DATE_FORMAT_YYYY_MM_DD)) {
            return  strToDateLong(dateToStrLong(parseStrToDate(birthday,DATE_FORMAT_YYYY_MM_DD)));
        }else if(birthday.length()==10&isValidDate(birthday,DATE_FORMAT_POINTYYYYMMDD)){
            return  strToDateLong(dateToStrLong(parseStrToDate(birthday,DATE_FORMAT_POINTYYYYMMDD)));
        }else if(isValidDate(birthday,DATE_TIME_FORMAT_YYYY年MM月DD日)){
            return  strToDateLong(dateToStrLong(parseStrToDate(birthday,DATE_TIME_FORMAT_YYYY年MM月DD日)));
        }else {
            return new Date();
        }
    }


     static long from;
    public static void main(String[] args)throws Exception {

//        String str= "20200304";
//        if(isValidDate(str,"yyyy年MM月dd日")){
//            System.out.println(strToDateLong(dateToStrLong(parseStrToDate(str,"yyyy年MM月dd日"))));
//        }

//        ApiStore iHttpUrlV2 = HttpClient.getRetrofit(ConstantValue.BASEURLV2).create(ApiStore.class);
//
//        ApiStore iHttpUrl = HttpClient.getRetrofit(ConstantValue.BASEURL).create(ApiStore.class);
//
//       Retrofit rq= HttpClient.getRetrofit(ConstantValue.BASEURLV2);
//        Retrofit rq2= HttpClient.getRetrofit(ConstantValue.BASEURL);
//
//        System.out.println("hello");
//        String time=getInterval(1607757787000l,1607740173000l);
//        System.out.println(time);
//        if(from==0){
//            System.out.println("hello");
//        }
//
//       String cost= getCost(130,100);
//        System.out.println(cost);


        if(from ==0){
            System.out.println("hlllo");
            return;
        }
        if(true){
            System.out.println("ceshi");
        }
    }

    /**
     * 格式化String时间
     * @param time String类型时间
     * @param timeFromat String类型格式
     * @return 格式化后的Date日期
     */
    public static Date parseStrToDate(String time, String timeFromat) {
        if (time == null || time.equals("")) {
            return null;
        }

        Date date=null;
        try{
            DateFormat dateFormat=new SimpleDateFormat(timeFromat);
            date=dateFormat.parse(time);
        }catch(Exception e){

        }

        return date;
    }


    /**
     * 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss
     *
     * @param dateDate
     * @return
     */
    public static String dateToStrLong(java.util.Date dateDate) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(dateDate);
        return dateString;
    }

    /**
     * 将短时间格式时间转换为字符串 yyyy-MM-dd
     *
     * @param dateDate
     * @param k
     * @return
     */
    public static String dateToStr(java.util.Date dateDate) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(dateDate);
        return dateString;
    }

    /**
     * 将短时间格式字符串转换为时间 yyyy-MM-dd
     *
     * @param strDate
     * @return
     */
    public static Date strToDate(String strDate) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        ParsePosition pos = new ParsePosition(0);
        Date strtodate = formatter.parse(strDate, pos);
        return strtodate;
    }

    /**
     * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
     *
     * @param strDate
     * @return
     */
    public static Date strToDateLong(String strDate) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        ParsePosition pos = new ParsePosition(0);
        Date strtodate = formatter.parse(strDate, pos);
        return strtodate;
    }

    /**
     * 验证日期格式是否满足要求
     *
     * @param str          需要验证的日期格式
     * @param formatString 验证的标准格式，如：（yyyy/MM/dd HH:mm:ss）
     * @return 返回验证结果
     */
    public static boolean isValidDate(String str, String formatString) {
        // 指定日期格式，注意yyyy/MM/dd区分大小写；
        SimpleDateFormat format = new SimpleDateFormat(formatString);
        try {
            // 设置lenient为false.
            // 否则SimpleDateFormat会比较宽松地验证日期，比如2007/02/29会被接受，并转换成2007/03/01
            format.setLenient(false);
            format.parse(str);
        } catch (ParseException e) {
            // e.printStackTrace();
            // 如果throw java.text.ParseException或者NullPointerException，就说明格式不对
            return false;
        }
        return true;
    }

    /**
     19      * 时间戳转换成字符串
     20      */
     public static String getDateToString(long time) {
         Date d = new Date(time);
         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         return sf.format(d);
     }


    /**
     19      * 时间戳转换成字符串
     20      */
    public static String getDateToShortString(long time) {
        Date d = new Date(time);
        SimpleDateFormat sf = new SimpleDateFormat("yyyy.MM.dd HH:mm");
        return sf.format(d);
    }

    public static String getInterval(long endtime,long starttime)
     {
         long nd = 1000*24*60*60;//一天的毫秒数
         long nh = 1000*60*60;//一小时的毫秒数
         long nm = 1000*60;//一分钟的毫秒数
         long ns = 1000;//一秒钟的毫秒数

         long diff= endtime - starttime;
         long day = diff/nd;//计算差多少天
         long hour = diff%nd/nh;//计算相差剩余多少小时
         long min = diff%nd%nh/nm;//计算差多少分钟
         long sec = diff%nd%nh%nm/ns;//计算差多少秒//输出结果
         System.out.println("时间相差："+day+"天"+hour+"小时"+min+"分钟"+sec+"秒");
         String hourStr=hour<10?"0"+hour:""+hour;
         String minStr=min<10?"0"+min:""+min;
         String senStr=sec<10?"0"+sec:""+sec;
         return  hourStr+":"+minStr+":"+senStr+"";
     }

    public static String getCost(double total,double cost)
    {
        DecimalFormat percent = new DecimalFormat("0.0");
        double bili = (double) (cost)/total;
        if(bili==1){
            return "暂无折扣";
        }
        return  percent.format(bili*10)+"折";
    }

    public static String getFormateMoney(double money)
    {
        BigDecimal bg = new BigDecimal(money);
        return  bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()+"";
    }

    public static boolean validate(String jsonStr) {
        JsonElement jsonElement;
        try {
            jsonElement = new JsonParser().parse(jsonStr);
        } catch (Exception e) {
            return false;
        }
        if (jsonElement == null) {
            return false;
        }
        if (!jsonElement.isJsonObject()) {
            return false;
        }
        return true;
    }

    /**
     * 判断字符串是否为URL
     * @param urls 用户头像key
     * @return true:是URL、false:不是URL
     */
    public static boolean isHttpUrl(String urls) {
        boolean isurl = false;
        String regex = "(((https|http)?://)?([a-z0-9]+[.])|(www.))"
                + "\\w+[.|\\/]([a-z0-9]{0,})?[[.]([a-z0-9]{0,})]+((/[\\S&&[^,;\u4E00-\u9FA5]]+)+)?([.][a-z0-9]{0,}+|/?)";//设置正则表达式

        Pattern pat = Pattern.compile(regex.trim());//比对
        Matcher mat = pat.matcher(urls.trim());
        isurl = mat.matches();//判断是否匹配
        if (isurl) {
            isurl = true;
        }
        return isurl;
    }

}
